package com.minortheorie3.sudoku;

import java.util.ArrayList;

import android.content.Context;


public class Controller {
	private static Controller instance;
	private Spel spel;
	private ArrayList<Vak> vakjes;


	private Context context;
	
	/**
	 * Maakt een nieuwe Controller aan die spel instantie heeft
	 */
	private Controller() {
		spel = new Spel();
	}
	
	/**
	 * Get de vakjes van het spel
	 * @return
	 */
	public ArrayList<Vak> getVakjes() {
		Vak[][] vakjes2D = spel.getVakjes();
		vakjes = new ArrayList<Vak>();
		//zet het eerst om naar een 1D array, de baseAdapter accepteert alleen 1D arrays
		for (int rij=0; rij<getAantalRijen(); rij++) {
			for (int kolom=0; kolom < getAantalKolommen(); kolom++) {
				vakjes.add(vakjes2D[rij][kolom]);
			}
		}
		return vakjes;
	}
	/**
	 * Vul getal in het vakje
	 * @param getal
	 * @throws Exception 
	 */
	public void vulGetal(int getal, Vak vakje) throws Exception {
		Controller.getInstance().spel.changeGetalVakje(getal, vakje);
	}
	
	public boolean checkIsGewonnen() {
		return spel.checkIsGewonnen();
	}
	
	
	
	public void vulVakjes() {
		spel.vakjesVullen(context);
	}
	
	public Context getContext() {
		return context;
	}

	public void setContext(Context context) {
		this.context = context;
	}
	
	public Vak getVakje(int position) {
		return vakjes.get(position);
	}
	
	public int getAantalRijen() {
		return spel.getAantalRijen();
	}
	
	public int getAantalKolommen() {
		return spel.getAantalKolommen();
	}

	/**
	 * Get instantie van Controller, altijd maar een (singleton)
	 * @return
	 */
	public static Controller getInstance() {
		if (instance == null) instance = new Controller();
		return instance;
	}

	
	public boolean checkEindspel() {
		return spel.checkEindspel();
	}
}
